//package cn.cttic.app.api.controller;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.util.ObjectUtil;
//import com.alibaba.fastjson.JSON;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.IdWorker;
//import cn.cttic.app.api.model.AppLoginUser;
//import cn.cttic.app.api.domain.AppUserSignIn;
//import cn.cttic.app.api.domain.SignInActivity;
//import cn.cttic.app.api.domain.SignInActivityRule;
//import cn.cttic.app.api.domain.dto.AppSignInQueryRequest;
//import cn.cttic.app.api.domain.dto.AppSignInRequest;
//import cn.cttic.app.mapper.AppUserSignInMapper;
//import cn.cttic.app.service.IAppSignActivityService;
//import cn.cttic.common.core.domain.R;
//import cn.cttic.common.core.enums.DelFlag;
//import cn.cttic.common.redis.utils.RedisUtils;
//import cn.cttic.common.satoken.utils.AppLoginHelper;
//import cn.cttic.operate.api.consts.ActivityConsts;
//import cn.cttic.operate.api.domain.ActivityAwardDistribute;
//import lombok.RequiredArgsConstructor;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.time.LocalDate;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * 移动端 - 签到接口
// */
//@Validated
//@RequiredArgsConstructor
//@RestController
//@RequestMapping("/user")
//public class AppSignInController {
//
//    private final AppUserSignInMapper appUserSignInMapper;
//
//    private final IAppSignActivityService appSignActivityService;
//
//    /**
//     * 签到
//     *
//     * @return
//     */
//    @PostMapping("/signIn")
//    public R<?> signIn() {
//
//        AppLoginUser loginUser = AppLoginHelper.getAppLoginUser();
//
//        List<AppUserSignIn> userSignInList = appUserSignInMapper.selectList(
//            new QueryWrapper<AppUserSignIn>()
//                .eq("user_id", loginUser.getUserId())
//                .eq("sign_date", LocalDate.now())
//                .eq("del_flag", 0)
//        );
//
//        if (!userSignInList.isEmpty()) {
//            return R.fail("已签到");
//        }
//
//        SignInActivity matchedActivity = appSignActivityService.matchSignInRules(loginUser.getUserId(), LocalDate.now());
//        if (ObjectUtil.isEmpty(matchedActivity)) {
//
//            AppUserSignIn userSignIn = new AppUserSignIn();
//            userSignIn.setSignDate(LocalDate.now());
//            userSignIn.setUserId(loginUser.getUserId());
//            userSignIn.setSignActivityId("");
//            userSignIn.setSignActivityRuleIdList("");
//            userSignIn.setSignAward("");
//            userSignIn.setDelFlag(DelFlag.NORMAL.getValue());
//            if (appUserSignInMapper.insert(userSignIn) > 0) {
//                return R.ok();
//            } else {
//                return R.fail();
//            }
//        } else {
//            List<ActivityAwardDistribute> awardList = appSignActivityService.excuteSignInRules(loginUser.getUserId(), matchedActivity, LocalDate.now());
//            return R.ok(awardList);
//        }
//    }
//
//    /**
//     * 补签
//     *
//     * @return
//     */
//    @PostMapping("/retroactiveSignIn")
//    public R<?> retroactiveSignIn(@Validated @RequestBody AppSignInRequest signInRequest) {
//
//        AppLoginUser loginUser = AppLoginHelper.getAppLoginUser();
//
//        List<AppUserSignIn> userSignInList = appUserSignInMapper.selectList(
//            new QueryWrapper<AppUserSignIn>()
//                .eq("user_id", loginUser.getUserId())
//                .eq("sign_date", signInRequest.getSignDate())
//                .eq("del_flag", 0)
//        );
//
//        if (!userSignInList.isEmpty()) {
//            return R.fail("已签到");
//        }
//
//        SignInActivity matchedActivity = appSignActivityService.matchSignInRules(loginUser.getUserId(), signInRequest.getSignDate());
//        if (ObjectUtil.isEmpty(matchedActivity)) {
//
//            AppUserSignIn userSignIn = new AppUserSignIn();
//            userSignIn.setSignDate(signInRequest.getSignDate());
//            userSignIn.setUserId(loginUser.getUserId());
//            userSignIn.setSignActivityId("");
//            userSignIn.setSignActivityRuleIdList("");
//            userSignIn.setSignAward("");
//            userSignIn.setDelFlag(DelFlag.NORMAL.getValue());
//            if (appUserSignInMapper.insert(userSignIn) > 0) {
//                return R.ok();
//            } else {
//                return R.fail();
//            }
//        } else {
//            List<ActivityAwardDistribute> awardList = appSignActivityService.excuteSignInRules(loginUser.getUserId(), matchedActivity, signInRequest.getSignDate());
//            return R.ok(awardList);
//        }
//    }
//
//    /**
//     * 获取指定月份的签到数据
//     *
//     * @return
//     */
//    @PostMapping("/getCurrentSignInList")
//    public R<List<AppUserSignIn>> getCurrentSignInList() {
//
//        AppLoginUser loginUser = AppLoginHelper.getAppLoginUser();
//
//        List<AppUserSignIn> userSignInList = appUserSignInMapper.selectList(
//            new QueryWrapper<AppUserSignIn>()
//                .eq("user_id", loginUser.getUserId())
//                .eq("del_flag", 0)
//                .apply("(YEAR(sign_date) = " + LocalDate.now().getYear() + " AND MONTH(sign_date) = " + LocalDate.now().getMonthValue() + ")")
//        );
//
//        return R.ok(userSignInList);
//    }
//
//
//    /**
//     * 获取指定月份的签到数据
//     *
//     * @return
//     */
//    @PostMapping("/getSignList")
//    public R<List<AppUserSignIn>> getSignList(@Validated @RequestBody AppSignInQueryRequest signInRequest) {
//
//        AppLoginUser loginUser = AppLoginHelper.getAppLoginUser();
//
//        List<AppUserSignIn> userSignInList = appUserSignInMapper.selectList(
//            new QueryWrapper<AppUserSignIn>()
//                .eq("user_id", loginUser.getUserId())
//                .eq("del_flag", 0)
//                .apply("(YEAR(sign_date) = " + signInRequest.getYear() + " AND MONTH(sign_date) = " + signInRequest.getMonth() + ")")
//        );
//
//        return R.ok(userSignInList);
//    }
//
//    /**
//     * 签到活动放到redis中
//     *
//     * @return
//     */
//    @PostMapping("/addSignActivityToCache")
//    public R<?> handleSignActivity(@RequestBody SignInActivity signInActivity) {
//        signInActivity.setBeginDate(LocalDate.of(signInActivity.getBeginYear(), signInActivity.getBeginMonth(), signInActivity.getBeginDay()));
//        signInActivity.setEndDate(LocalDate.of(signInActivity.getEndYear(), signInActivity.getEndMonth(), signInActivity.getEndDay()));
//        List<SignInActivityRule> ruleList = signInActivity.getRuleList();
//        if (CollUtil.isNotEmpty(ruleList)) {
//            ruleList.forEach(x -> {
//                x.setRuleId(IdWorker.getIdStr());
//            });
//            signInActivity.setRuleList(ruleList);
//        }
//        RedisUtils.setCacheObject(ActivityConsts.SIGN_IN_ACTIVITY, JSON.toJSONString(signInActivity));
//        return R.ok();
//    }
//
//
//    /**
//     * 签到活动列表
//     *
//     * @param args
//     */
//    public static void main(String[] args) {
//
//        SignInActivity activity = new SignInActivity();
//        activity.setActivityId("1774384545379463168");
//        activity.setActivityCode("1774384545379463168");
//        activity.setActivityName("签到活动");
//        activity.setActivityType("104");
//        activity.setPriorityEnabled(1);
//        activity.setBeginDate(LocalDate.of(2024, 3, 1));
//        activity.setEndDate(LocalDate.of(2024, 3, 31));
//
//        activity.setRuleList(new ArrayList<>());
//
//        SignInActivityRule rule;
//        // 每日签到送5积分
//        rule = new SignInActivityRule();
//        rule.setRuleId(IdWorker.getIdStr());
//        rule.setPriority(0);
//        rule.setRuleType(1);
//        rule.setRewardType(0);
//        rule.setRewardAmount(5);
//        activity.getRuleList().add(rule);
//
//        // 连续签到7天送30积分
//        rule = new SignInActivityRule();
//        rule.setRuleId(IdWorker.getIdStr());
//        rule.setPriority(1);
//        rule.setRuleType(2);
//        rule.setMinDaysLimit(7);
//        rule.setMaxTimesLimit(3);
//        rule.setRewardType(0);
//        rule.setRewardAmount(30);
//        activity.getRuleList().add(rule);
//
//        // 连续签到14天送100积分
//        rule = new SignInActivityRule();
//        rule.setRuleId(IdWorker.getIdStr());
//        rule.setPriority(2);
//        rule.setRuleType(2);
//        rule.setMinDaysLimit(14);
//        rule.setMaxTimesLimit(1);
//        rule.setRewardType(0);
//        rule.setRewardAmount(100);
//        activity.getRuleList().add(rule);
//
//        // 连续签到21天送200积分
//        rule = new SignInActivityRule();
//        rule.setRuleId(IdWorker.getIdStr());
//        rule.setPriority(3);
//        rule.setRuleType(2);
//        rule.setMinDaysLimit(14);
//        rule.setMaxTimesLimit(0);
//        rule.setRewardType(0);
//        rule.setRewardAmount(200);
//        activity.getRuleList().add(rule);
//
//        // 累计签到20天送300积分
//        rule = new SignInActivityRule();
//        rule.setRuleId(IdWorker.getIdStr());
//        rule.setPriority(5);
//        rule.setRuleType(3);
//        rule.setMinDaysLimit(20);
//        rule.setRewardType(0);
//        rule.setRewardAmount(300);
//        activity.getRuleList().add(rule);
//
//
//        // 满签送1张优惠券
//        rule = new SignInActivityRule();
//        rule.setRuleId(IdWorker.getIdStr());
//        rule.setPriority(9);
//        rule.setRuleType(4);
//        rule.setRewardType(1);
//        rule.setRewardAmount(1);
//        rule.setRewardArgs("20240327100001");
//        activity.getRuleList().add(rule);
//
//        RedisUtils.setCacheObject(ActivityConsts.SIGN_IN_ACTIVITY, JSON.toJSONString(activity));
//    }
//}
